package gepes.servlet;

import gepes.exepcion.DAOExcepcion;
import gepes.exepcion.LoginExcepcion;
import gepes.modelo.LoginUser;
import gepes.modelo.Usuario;
import gepes.modelo.Administrador;
import gepes.modelo.Profesor;
import gepes.modelo.Estudiante;

import gepes.negocio.GestionAdministrador;
import gepes.negocio.GestionEstudiante;
import gepes.negocio.GestionProfesor;
import gepes.negocio.GestionUsuario;

import java.io.IOException;

import javax.security.auth.login.LoginException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public LoginServlet() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub

		String usuario = request.getParameter("usuario");
		String clave = request.getParameter("clave");

		GestionProfesor negProfesor = new GestionProfesor();
		GestionAdministrador negAdmin = new GestionAdministrador();
		GestionUsuario negUsu = new GestionUsuario();
		int Login = 0;
		LoginUser vo = new LoginUser();
		HttpSession session = request.getSession();
		session.setMaxInactiveInterval(800);
		try {
			Profesor voPro = negProfesor.login(usuario, clave);
			if (voPro.getCorreo() != null) {
				vo = (LoginUser) voPro;
				vo.setTipo("Profesor");
				session.setAttribute("USUARIO_ACTUAL", vo);
				Login = 1;
			} else {
				Administrador voAdm = negAdmin.login(usuario, clave);
				if (voAdm.getCorreo() != null) {
					vo = (LoginUser) voAdm;
					vo.setTipo("Administrador");
					session.setAttribute("USUARIO_ACTUAL", vo);
					Login = 1;
				} else {
					Usuario voUsu = negUsu.login(usuario, clave);
					if (voUsu.getCorreo() != null) {
						vo = (LoginUser) voUsu;
						vo.setTipo("Usuario");
						session.setAttribute("USUARIO_ACTUAL", vo);
						Login = 1;
					} else {
						request.setAttribute("MENSAJE",
								"Usuario y/o clave incorrectos");
					}
				}
			}
		} catch (DAOExcepcion e) {
			request.setAttribute("MENSAJE", "Mensaje: " + e.getMessage());
		} catch (LoginExcepcion e) {
			request.setAttribute("MENSAJE", "Mensaje: " + e.getMessage());
		}
		if (Login == 0) {
			RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
			rd.forward(request, response);
		} else {
			response.sendRedirect("PortadaServlet");

		}
	}
}
